์๋ฐ ์๋ธ๋ฆฟ/JSP -> ์คํ๋ง
์๋ธ๋ฆฟ(Servlet)
์ ์ : ์๋ธ๋ฆฟ์ ์๋ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๊ธฐ์ ์ด๋ค. ์น ์๋ฒ์์ ๋์ํ๋ฉฐ, HTTP ์์ฒญ์ ๋ฐ์์ ์๋ต์ ์์ฑํ๋ ์ญํ ์ ํ๋ค. ์๋ธ๋ฆฟ์ ์๋ฐ์ javax.servlet ํจํค์ง๋ฅผ ํตํด ์ ๊ณต๋๋ฉฐ, ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ์คํ๋๋ค.
์ญํ :
- ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ HTTP ์์ฒญ์ ๋ฐ์ ์๋ฒ์์ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HTML, JSON, XML ๋ฑ์ ํํ๋ก ์๋ต
- ๋ณดํต, HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ์ doGet() ๋๋ doPost() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด ์์ฒญ์ ์ฒ๋ฆฌ
์์ :
JSP(JavaServer Pages)
์ ์ : JSP๋ HTML ์ฝ๋์ ์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ ๊ธฐ์ ์ด๋ค. JSP๋ ์๋ฐ ์๋ธ๋ฆฟ์ ํ์ฅ์ผ๋ก, ์น ํ์ด์ง์์ ์ฌ์ฉ์ ์์ฒญ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ํ์ํ ์ ์๋ค. JSP๋ ์ปดํ์ผ ์ ์๋ธ๋ฆฟ์ผ๋ก ๋ณํ๋์ด ์คํ๋๋ค.
์ญํ :
- HTML๊ณผ ์๋ฐ ์ฝ๋๋ฅผ ๊ฒฐํฉํ์ฌ ์๋ฒ ์ธก์์ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑ
- ์ฃผ๋ก ํ๋ฆฌ์ ํ ์ด์ ๋ก์ง์ ์ ๋ฆฌํ๋ฉฐ, JSP์์ ์คํ๋๋ ์๋ฐ ์ฝ๋๋ scriptlet์ด๋ผ๋ ํ๊ทธ ์์ ์ฝ์ ๋๋ค
์์ :
์๋ธ๋ฆฟ๊ณผ JSP์ ๋ฑ์ฅ: ์๋ฐ ์น ๊ฐ๋ฐ์ ์์
-
์๋ธ๋ฆฟ 1990๋ ๋ ๋ง, ์๋ฐ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ํฉํ ๊ธฐ์ ๋ก ์๋ฆฌ์ก๊ณ ์์๋ค. ์๋ธ๋ฆฟ์ ์น ์๋ฒ์์ ๋์ํ๋ฉฐ, HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ๋ ์๋ฒ ์ธก ์๋ฐ ํ๋ก๊ทธ๋จ์ด๋ฏ๋ก, ๊ธฐ์กด CGI(Common Gateway Interface) ๋ฐฉ์๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ด์๋ค. ์๋ธ๋ฆฟ์ ๋ฉํฐ์ค๋ ๋ฉ์ ์ง์ํด ๊ฐ ์์ฒญ๋ง๋ค ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์์์ผ๋ฉฐ, ์๋ฒ ์ฑ๋ฅ์ด ํฅ์๋์๋ค.
-
JSP ์๋ธ๋ฆฟ๋ง์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ์๋ ๋ถํธํจ์ด ์์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ -> JSP : HTML ์ฝ๋ ์์ ์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์น ํ์ด์ง์์ ๋์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ค
์๋ธ๋ฆฟ๊ณผ JSP๋ ์ด๊ธฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์ค์ํ ๊ธฐ์ ์ ๊ธฐ์ด๋ฅผ ์ ๊ณตํ์ผ๋, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ช ๊น์ง ์ค์ํ ํ๊ณ๊ฐ ๋๋ฌ๋ฌ๋ค.
์๋ธ๋ฆฟ/JSP์ ํ๊ณ
-
์ฝ๋์ ๋ณต์ก์ฑ๊ณผ ์ ์ง๋ณด์์ ์ด๋ ค์ | ์๋ธ๋ฆฟ๊ณผ JSP๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฆฌ์ ํ ์ด์ ๋ก์ง์ ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค => ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ค down
-
๋ณต์กํ ์์ฒญ ์ฒ๋ฆฌ์ ํ์ฅ์ฑ ๋ถ์กฑ | ์๋ธ๋ฆฟ์ ๊ฐ ์์ฒญ์ ๋ํด ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก URL ๋งคํ์ ๊ด๋ฆฌํด์ผ ํ๊ณ , ๊ฐ๋ฐ์๊ฐ ์์ข ์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค. => ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฝ๋ ์ค๋ณต๊ณผ ๋ณต์ก์ฑ์ด ๋ฌธ์ ๊ฐ ๋จ
-
๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋ ๋ฌธ์ | ์๋ธ๋ฆฟ๊ณผ JSP๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ ๊ฐ์ฒด๋ค์ด ์ง์ ์๋ก์ ์์กด์ฑ์ ๊ด๋ฆฌํด์ผ ํ๋ค. => ๋์ ๊ฒฐํฉ๋ + ์ ์ง๋ณด์, ํ ์คํธ ๋ณต์กํด์ง
์คํ๋ง ํ๋ ์์ํฌ๋ ์์์ ์ธ๊ธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๋ฐ ์น ๊ฐ๋ฐ์ ํจ๋ฌ๋ค์์ ๋ณํ์ํค๊ธฐ ์ํด ๋ฑ์ฅํ๋ค. ์ํฐํ๋ผ์ด์ฆ ๊ณ์ ์๋ณ์ด ๋๊ธฐ ์ํด์ ( ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ, ์์ฐ์ฑ up )
์คํ๋ง ํ๋ ์์ํฌ์ ๋ฑ์ฅ
- ์์กด์ฑ ์ฃผ์ (DI)๊ณผ ์ ์ด์ ์ญ์ (IoC) | ์คํ๋ง์ ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํจ => ํฉํ ๋ฆฌ ํจํด์ ํ์ฅ ๊ฐ์ฒด ์์ฑ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ฑ ์์ง๋ฉฐ, ํ์ํ ์์กด์์ ์๋์ผ๋ก ์ฃผ์ => ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋ down => ์ ์ฐ์ฑ, ํ์ฅ์ฑ up!
- DI ์ ํจ๊ณผ: ๊ฐ์ฒด ์์ฑ์ ์ธ๋ถ์์ ์ฒ๋ฆฌํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค์์ผ๋ก์จ ์ ์ง๋ณด์์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ด ํฌ๊ฒ ํฅ์๋จ
- AOP(Aspect-Oriented Programming)์ ๊ณตํต ๊ธฐ๋ฅ์ ๋ถ๋ฆฌ | ์คํ๋ง์ AOP๋ฅผ ํตํด ๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์๊ณผ ๊ฐ์ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํจ => ํ๋ก์ ํจํด ๊ธฐ๋ฐ ๋น์ฆ๋์ค ๋ก์ง ์ ํ์ ํน์ ๋ก์ง์ ์ฝ์ ํ ์ ์๋ค
- AOP์ ํจ๊ณผ: ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ๋ณต์ฅ์ฑ์ ์ค์ด๊ณ , ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง
- Spring MVC: ์์ ํ MVC ํจํด์ ๊ตฌํ | ์๋ธ๋ฆฟ๊ณผ JSP์์์ MVC ๊ตฌํ์ด ๋ช ํํ์ง ์์์ => ์คํ๋ง์ Spring MVC๋ฅผ ํตํด ๋ชจ๋ธ(Model)-๋ทฐ(View)-์ปจํธ๋กค๋ฌ(Controller) ํจํด์ ์๋ฒฝํ๊ฒ ๊ตฌํํจ
- DispatcherServlet์ด ๋ชจ๋ ์์ฒญ์ ์ค์์์ ์ฒ๋ฆฌํ๊ณ , ์์ฒญ์ ๋ฐ๋ผ ์ ์ ํ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํ ํ, ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์ ์ ๋ฌํจ
- Controller๋ ์์ํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ณ , View๋ ํ๋ฆฌ์ ํ ์ด์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ฑ ์์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋จ~
- ํธ๋์ญ์ ๊ด๋ฆฌ์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด | ์คํ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ํด ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ ์ธ์ ํธ๋์ญ์ ๊ด๋ฆฌ๋ก ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์. ๋ํ JdbcTemplate์ ๊ฐ์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ํตํด ๋ฐ๋ณต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฝ๋ ์์ฑ์ ์ค์ฌ ์์ฐ์ฑ์ ๋์์
MVC ํจํด (Model-VIew-Controller)
์ ์: MVC ํจํด์ ์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด๋ค
๊ตฌ์ฑ ์์:
- Model (๋ชจ๋ธ): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๋ฑ์ ์ญํ ์ ํ๋ค
- View (๋ทฐ): ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์ธํฐํ์ด์ค๋ก, HTML, JSP, Thymeleaf ๋ฑ์ UI๋ฅผ ๋ด๋นํ๋ค. ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ํ์์ผ๋ก ์ถ๋ ฅํ๋ค.
- Controller (์ปจํธ๋กค๋ฌ): ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ์ ์ ํ ๋ชจ๋ธ์ ํธ์ถํ ๋ค ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค
์์:
DI (Dependency Injection, ์์กด์ฑ ์ฃผ์ )
์ ์ : DI๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์ ํ๋ ์ค๊ณ ํจํด์ด๋ค. ์คํ๋ง์์๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กดํ ๋, ํด๋น ์์กด์ฑ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ์ฌ ์ฃผ์ ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ ์ฐ์ฑ๊ณผ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค.
์ญํ :
- ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ํ๋ ์์ํฌ๊ฐ ๋งก์ผ๋ฏ๋ก ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํํ ์ ์๋ค
- ์คํ๋ง์์ DI๋ ์ฃผ๋ก ์ปจํธ๋กค๋ฌ์ ์๋น์ค ํด๋์ค ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค
IoC (Inversion of Control, ์ ์ด์ ์ญ์ )
์ ์ : IoC๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฌ์ฉ์ ํ๋ ์์ํฌ๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ๋ ์ด๋ค. ์ ํต์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ณ ํธ์ถํ์ง๋ง, IoC๋ ์ด๋ฌํ ํ๋ฆ์ ์ญ์ ์์ผ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ํ๋ ์์ํฌ์ ๋งก๊ธด๋ค.
์ญํ :
- IoC ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํ๊ณ , ํ์ํ ์์ ์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํด ์์กด์ฑ์ ์ฃผ์ ํด ์ค๋ค
- ์คํ๋ง์ @Autowired์ ๊ฐ์ ์ฃผ์์ IoC ๊ฐ๋ ์ ์ ์ฉํ ์์กด์ฑ ์ฃผ์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ๋๊ตฌ์ด๋ค
์๋ธ๋ฆฟ - > ์คํ๋ง
๋ณต์ก์ฑ - > ๋จ์์ฑ
์คํ๋ง์ ์์กด์ฑ ์ฃผ์ ๊ณผ MVC ํจํด์ ํตํด ํจ์ฌ ๋ช ํํ๊ณ ์ฒด๊ณ์ ์ธ ๊ตฌ์กฐ๋ก ์ ํ์๋ ๊ด๋ฆฌ - > ์๋ ๊ด๋ฆฌ
์คํ๋ง์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ด๋ฆฌ๋ฅผ ํตํด URL ๋งคํ์ด๋ ๊ฐ์ฒด ์์ฑ์ ์๋ํ